package edu.sias.hyznxfapi.pptMade.utils.api;

import com.alibaba.fastjson.JSON;
import edu.sias.hyznxfapi.pptMade.ApiAuthAlgorithm;
import edu.sias.hyznxfapi.pptMade.ApiClient;
import edu.sias.hyznxfapi.pptMade.CreateResponse;
import edu.sias.hyznxfapi.pptMade.ProgressResponse;

import java.io.IOException;

public class PPTGenerator {

    /**
     * 根据query生成PPT
     * @param query
     * @return
     * @throws InterruptedException
     */
    //需要传递三个值：query：这个ppt的标题，author:作者，theme:主题
    //例如：("怎么成为祖国的花朵","人才集中大队","purple")
    //返回的类型类似：https://bjcdn.openstorage.cn/xinghuo-privatedata/%2Ftmp/apiTempFileae241099e26342a881d20e6e356bd7a82670822980148716990/%E5%9F%B9%E5%85%BB%E7%A5%96%E5%9B%BD%E8%8A%B1%E6%9C%B5%E7%9A%84%E4%BA%94%E6%AD%A5%E6%B3%95.pptx
    //需要前端去访问下载
    public String generatePPT(String query,String author,String theme) throws InterruptedException {
        // 输入个人appId
        String appId = "c52e01de";
        String secret = "N2M3OTIwODZmNjc4OGMzNjFjNmEyNDk1";
        String urlInsert = "";
        long timestamp = System.currentTimeMillis() / 1000;
        String ts = String.valueOf(timestamp); // 获取当前时间的时间戳，并将其转换为字符串

        // 获得鉴权信息
        ApiAuthAlgorithm auth = new ApiAuthAlgorithm();
        String signature = auth.getSignature(appId, secret, timestamp); // 创建ApiAuthAlgorithm对象，并使用appId、secret和timestamp生成签名。
        System.out.println("签名：" + signature);

        // 建立链接
        ApiClient client = new ApiClient("https://zwapi.xfyun.cn"); // 创建ApiClient对象，初始化时传入API的基础URL。

        // 查询PPT模板信息
        String templateResult = null; // 调用ApiClient的getTemplateList方法获取PPT模板列表。
        try {
            templateResult = client.getTemplateList(appId, ts, signature);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        System.out.println("查询PPT模板信息:" + templateResult);

        // 发送生成PPT请求
        String resp = null; // 调用ApiClient的createPPT方法，根据query生成PPT，并获取响应。
        try {
            resp = client.createPPT(appId, ts, signature, query,author,theme);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        System.out.println("打印出生成PPT的响应:" + resp); // 打印出生成PPT的响应。
        CreateResponse response = JSON.parseObject(resp, CreateResponse.class); // 将响应的JSON字符串解析为CreateResponse类的对象。

        // 利用sid查询PPT生成进度
        int progress = 0;
        ProgressResponse progressResponse; // 定义进度变量和响应对象。
        while (progress < 100) { // 使用循环不断检查PPT生成的进度，直到进度达到100%。
            String progressResult = null;
            try {
                progressResult = client.checkProgress(appId, ts, signature, response.getData().getSid());
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
            progressResponse = JSON.parseObject(progressResult, ProgressResponse.class);
            progress = progressResponse.getData().getProcess();
            System.out.println("根据sid查询ppt的生成进度：" + progressResult);

            if (progress < 100) {
                Thread.sleep(5000); // 暂停2秒
            }
            if (progress == 100){
                //已经成功生成ppt
                String pptUrl = progressResponse.getData().getPptUrl();
                urlInsert = pptUrl;
            }
        }
        return urlInsert;
    }

    public static void main(String[] args) throws InterruptedException {
        PPTGenerator generator = new PPTGenerator();
        String s = generator.generatePPT("怎么成为祖国的花朵","人才集中大队","purple");
        System.out.println("打印一下" + s);
    }
}
